## Callback (Geri Çağırma) Fonksiyonları
**Callback fonksiyonları**, bir başka fonksiyona argüman olarak geçirilen ve bu fonksiyonun içerisinde belirli bir zamanda veya belirli bir koşul sağlandığında çalıştırılan fonksiyonlardır. Esasen, "Bunu yap, sonra şunu yap" mantığını temsil ederler.
**Temel Kavramlar:**
* **Asenkron Programlama:** Callback'ler, özellikle [asenkron programlama](https://www.nedemek.page/kavramlar/asenkron%20programlama) senaryolarında sıklıkla kullanılır. Bu senaryolarda, bir işlemin tamamlanması zaman alabilir (örneğin, bir ağ isteği veya dosya okuma). Callback, bu işlemin tamamlandığını bildirmek ve sonuçları işlemek için kullanılır.
* **Event Handling (Olay İşleme):** Web tarayıcılarında, kullanıcı etkileşimleri (tıklamalar, tuş vuruşları, vb.) olaylar (event) olarak adlandırılır. Callback fonksiyonları, bu olaylar gerçekleştiğinde tetiklenir ve ilgili işlemleri gerçekleştirir. Bu, [event%20handling](https://www.nedemek.page/kavramlar/event%20handling) olarak bilinir.
* **Yüksek Dereceli Fonksiyonlar (Higher-Order Functions):** Callback kullanan fonksiyonlar genellikle "yüksek dereceli fonksiyonlar" olarak adlandırılır. Çünkü bu fonksiyonlar, başka fonksiyonları argüman olarak kabul ederler. JavaScript'teki `map`, `filter`, ve `reduce` gibi dizi metotları, yüksek dereceli fonksiyonlara örneklerdir ve genellikle callback'lerle birlikte kullanılırlar.
**Kullanım Alanları:**
* **Zamanlayıcılar (Timers):** `setTimeout` ve `setInterval` gibi fonksiyonlar, belirli bir süre sonra veya belirli aralıklarla bir callback fonksiyonunu çalıştırmak için kullanılır.
* **Ağ İstekleri (Network Requests):** Bir sunucuya yapılan HTTP isteği tamamlandığında, sunucudan gelen yanıtı işlemek için bir callback fonksiyonu kullanılır.
* **Animasyonlar:** Animasyonlar oluşturmak için, her kareyi çizmek üzere bir callback fonksiyonu kullanılabilir.
**Avantajları:**
* **Esneklik:** Callback'ler, bir fonksiyonun davranışını, çağıran kod tarafından belirlenen farklı durumlara göre özelleştirme imkanı sunar.
* **Asenkron Yönetimi:** Uzun süren işlemleri engellemeden (blocking) yönetmeyi sağlar.
* **Kodun Yeniden Kullanılabilirliği:** Aynı fonksiyon, farklı callback'lerle farklı amaçlar için kullanılabilir.
**Dezavantajları:**
* **Callback Hell (Geri Çağırma Cehennemi):** Çok sayıda iç içe geçmiş callback fonksiyonu, kodun okunabilirliğini ve bakımı zorlaştırabilir. Bu sorun, [promise'ler](https://www.nedemek.page/kavramlar/promise'ler) ve [async/await](https://www.nedemek.page/kavramlar/async%20await) gibi yapılarla çözülmeye çalışılmıştır.
* **Hata Yönetimi:** Callback'lerdeki hataları yönetmek, özellikle iç içe geçmiş callback'lerde zor olabilir.